/**
 * Created by xnr on 19/12/30.
 */

export function isvalidUsername(str) {
    const valid_map = ['admin', 'editor']
    return valid_map.indexOf(str.trim()) >= 0
}
/* 邮箱校验*/
export function validateeMail(str) {
    const reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/
    return reg.test(str)
}
/* 合法uri*/
export function validateURL(textval) {
    const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
    return urlregex.test(textval)
}

/* 小写字母*/
export function validateLowerCase(str) {
    const reg = /^[a-z]+$/
    return reg.test(str)
}

/* 大写字母*/
export function validateUpperCase(str) {
    const reg = /^[A-Z]+$/
    return reg.test(str)
}

/* 大小写字母*/
export function validatAlphabets(str) {
    const reg = /^[A-Za-z]+$/
    return reg.test(str)
}


var isPhone = /^([0-9]{3,4}-)?[0-9]{7,8}$/
var isMob = /^((\+?86)|(\(\+86\)))?(1[0-9]{10})$/;
// 电话号码校验
export function validateTelephone(rule, value, callback) {
    if (!isMob.test(value) && !isPhone.test(value)) {
        callback(new Error('请输入符合规范的电话号码'))
    } else {
        callback()
    }
}

// 手机号码校验
export function validateMobilePhone(rule, value, callback) {
    if (rule.required || (value && value !== '')) {
        if (!isMob.test(value)) {
            callback(new Error('请输入正确的手机号码'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}
// 验证码校验
export function validateCode(rule, value, callback) {
    if (rule.required || (value && value !== '')) {
        var isCode = /^[0-9]{6}$/;
        if (!isCode.test(value)) {
            callback(new Error('请输入6位数字'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}



// 密码校验
var pattern = /^[a-zA-Z0-9]{6,20}$/ ///(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{6,20}$/
export function validatePass(rule, value, callback) {
    if (value === '') {
        callback(new Error('请输入密码'))
    } else if (!pattern.test(value)) {
        callback(new Error('字母，数字，长度为6-20个字符'))
    } else {
        callback()
    }
}

// 校验小数后2位
export function floatValidate(rule, value, callback) {
    if (rule.required || (value && value !== '')) {
        var pattern = /^([0-9]\d?(\.\d{1,2})?|100)$/
        if (!pattern.test(value)) {
            callback(new Error('请输入保留100以内的小数点后2位数字'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}

// 校验单价，精确到小数点后2位
export function unitPriceValidate(rule, value, callback) {
    if (rule.required || (value && value !== '')) {
        var pattern = /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/
        if (!pattern.test(value)) {
            callback(new Error('请输入整数或者保留两位小数'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}

// 校验总价，精确到小数点后5位
export function totalPriceValidate(rule, value, callback) {
    if (rule.required || (value && value !== '')) {
        var pattern = /(^[1-9]\d*(\.\d{1,5})?$)|(^0(\.\d{1,5})?$)/
        if (!pattern.test(value)) {
            callback(new Error('请输入整数或者保留五位小数'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}

// 校验单重，精确到小数点后2位
export function unitWeightValidate(rule, value, callback) {
    if (rule.required || (value && value !== '')) {
        var pattern = /^(([1-9]{1}\d*)|(0{1}))(\.\d{2})$/
        console.log('pattern=' + pattern)
        console.log('value=' + value)
        if (!pattern.test(value)) {
            callback(new Error('请输入整数或者保留两位小数'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}

// 正数校验
export function positiveNumValidate(rule, value, callback) {
    var pattern = /^(\+)?\d+(\.\d+)?$/
    if (rule.required || (value && value !== '')) {
        if (!pattern.test(value)) {
            callback(new Error('请输入正数'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}


/**
   * 中国身份证验证
   */
  export function chinaIdentityValid (rule, value, callback) {
    if (!value) {
      return callback()
    }
    let city = {
      11: '北京',
      12: '天津',
      13: '河北',
      14: '山西',
      15: '内蒙古',
      21: '辽宁',
      22: '吉林',
      23: '黑龙江 ',
      31: '上海',
      32: '江苏',
      33: '浙江',
      34: '安徽',
      35: '福建',
      36: '江西',
      37: '山东',
      41: '河南',
      42: '湖北 ',
      43: '湖南',
      44: '广东',
      45: '广西',
      46: '海南',
      50: '重庆',
      51: '四川',
      52: '贵州',
      53: '云南',
      54: '西藏 ',
      61: '陕西',
      62: '甘肃',
      63: '青海',
      64: '宁夏',
      65: '新疆',
      71: '台湾',
      81: '香港',
      82: '澳门',
      91: '国外'
    }
    if (!value || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(value)) {
      callback(new Error('身份证号格式错误'))
    } else if (!city[value.substr(0, 2)]) {
      callback(new Error('身份证号格式错误'))
    } else {
      // 18位身份证需要验证最后一位校验位
      if (value.length === 18) {
        const code = value.split('')
        // ∑(ai×Wi)(mod 11)
        // 加权因子
        const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        // 校验位
        const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
        let sum = 0
        let ai = 0
        let wi = 0
        for (let i = 0; i < 17; i++) {
          ai = code[i]
          wi = factor[i]
          sum += ai * wi
        }
        if (parity[sum % 11].toString() !== code[17]) {
          callback(new Error())
        }
      }
    }
    callback()
  }

  function ossUri(uri, type) {
    if (uri == null)
        return "-----------error";
    if (uri.length >= 4 && uri.indexOf("http") > -1)
        return uri;
    var url = 'https://wcjy.oss-cn-shenzhen.aliyuncs.com/' + uri;
    if (type) {
        switch (type) {
            case 'd':
                url += '';
                break;
            case 'l':
                url += "/";
                url += '800';
                break;
            case 'f':
                url += "/";
                url += '400';
                break;
            case 'm':
                url += "/";
                url += '250';
                break;
            case 's':
                url += "/";
                url += '120';
                break;
        }
    }
    return url;
}



// 整数校验
export function integerNumValidate(rule, value, callback) {
    var pattern = /^(\+)?\d+$/
    if (rule.required || (value && value !== '')) {
        if (!pattern.test(value)) {
            callback(new Error('请输入正整数'))
        } else {
            callback()
        }
    } else {
        callback()
    }
}
const format = {
    Date(timestamp, formats) {
        // formats格式包括
        // 1. Y-m-d
        // 2. Y-m-d H:i:s
        // 3. Y年m月d日
        // 4. Y年m月d日 H时i分
        formats = formats || 'Y-m-d';
        var zero = function(value) {
            if (value < 10) {
                return '0' + value;
            }
            return value;
        };
        if (typeof(timestamp) == typeof("")) {
            timestamp = timestamp.replace(/-/g, "/").replace(/\.0/g, "")
        }
        var myDate = timestamp ? new Date(timestamp) : new Date();
        var year = myDate.getFullYear();
        var month = zero(myDate.getMonth() + 1);
        var day = zero(myDate.getDate());
        var hour = zero(myDate.getHours());
        var minite = zero(myDate.getMinutes());
        var second = zero(myDate.getSeconds());
        return formats.replace(/Y|m|d|H|i|s/ig, function(matches) {
            return ({
                Y: year,
                m: month,
                d: day,
                H: hour,
                i: minite,
                s: second
            })[matches];
        });
    }
}

export {
    ossUri,
    format
}